#include <climits>
using namespace std;
#include <vector>

class Solution
{
public:
    vector<int> singleNumber(vector<int>& nums)
    {
        int r = 0;
        for(auto e : nums)
        {
            r ^= e;
        }
        // 对于 INT_MIN，直接返回 r 是安全的，因为 INT_MIN 的二进制表示中只有一个 1，且位于最高位，因此它本身就可以用来区分两个不同的数。
        int num =(r==INT_MIN ? r : r&(-r));
        int num1 = 0, num2 = 0;
        for(auto e : nums)
        {
            if(e&num)
            {
                num1 = num1^e;
            }
            else
            {
                num2 = num2^e;
            }
        }
        return {num1, num2};
    }
};
